//package com.icss.background.common.util;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.FileReader;
//import java.io.FileWriter;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.RandomAccessFile;
//import java.io.StringReader;
//import java.io.StringWriter;
//import java.io.UnsupportedEncodingException;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Set;
//
//import org.apache.commons.io.IOUtils;
//import org.apache.commons.lang.StringUtils;
//import org.dom4j.Document;
//import org.dom4j.DocumentException;
//import org.dom4j.io.OutputFormat;
//import org.dom4j.io.SAXReader;
//import org.dom4j.io.XMLWriter;
//import org.slf4j.Logger;
//
//import com.icss.background.common.log.LoggerManager;
//import com.icss.background.util.DateUtils;
//@SuppressWarnings({ "unused" })
//public class FileUtils extends org.apache.commons.io.FileUtils {
//	/**
//	 * logger
//	 */
//	private static final Logger logger =  LoggerManager.getLogger(FileUtils.class);
//	/**
//	 * ENCODE_UTF8
//	 */
//	public static final String ENCODE_UTF8 = "UTF-8";
//	/**
//	 * ENCODE_GBK
//	 */
//	public static final String ENCODE_GBK = "GBK";
//
//	/**
//	 * 转换文件编码
//	 * 
//	 * @param file
//	 * @param encoding
//	 * @throws FileNotFoundException
//	 * @throws IOException
//	 */
//	public void convertFileCode(File file, String oldCode, String newCode) throws FileNotFoundException, IOException {
//		if (file != null && StringUtils.isNotEmpty(oldCode) && StringUtils.isNotEmpty(newCode) && !oldCode.equals(newCode)) {
//			String encode = FileEncodeDetector.getFileEncode(file);
//			if (!newCode.equalsIgnoreCase(encode)) {
//				String data = IOUtils.toString(new FileInputStream(file), oldCode);
//				writeStringToFile(file, data, newCode);
//			}
//		}
//	}
//
//	/**
//	 * 转换文件夹编码
//	 * 
//	 * @param file
//	 * @param encoding
//	 * @throws FileNotFoundException
//	 * @throws IOException
//	 */
//	public void convertFileCode(String directory, String oldCode, String newCode) throws FileNotFoundException, IOException {
//		if (directory != null && StringUtils.isNotEmpty(oldCode) && StringUtils.isNotEmpty(newCode) && !oldCode.equals(newCode)) {
//			File file = new File(directory);
//			if (file.exists()) {
//				List<String> list = recurFiles(directory);
//				for (String path : list) {
//					file = new File(path);
//					String encode = FileEncodeDetector.getFileEncode(file);
//					if (!newCode.equalsIgnoreCase(encode)) {
//						String data = IOUtils.toString(new FileInputStream(file), oldCode);
//						writeStringToFile(file, data, newCode);
//					}
//				}
//			}
//		}
//	}
//
//	/**
//	 * 递归获取文件
//	 * 
//	 * @param directory
//	 * @return
//	 */
//	public static List<String> recurFiles(String directory) {
//		List<String> files = new ArrayList<String>();
//		File file = new File(directory);
//		File[] childrenFiles = file.listFiles();
//		for (int i = 0; i < childrenFiles.length; i++) {
//			File childFile = childrenFiles[i];
//			if (childFile.isDirectory()) {
//				List<String> grandsons = recurFiles(childFile.getPath());
//				for (int j = 0; j < grandsons.size(); j++) {
//					files.add(grandsons.get(j));
//				}
//			} else if (childFile.isFile()) {
//				files.add(childFile.getPath());
//			}
//		}
//		return files;
//	}
//
//	/**
//	 * 使用FileWriter追加文件内容
//	 * 
//	 * @param file
//	 * @param content
//	 * @throws FileNotFoundException
//	 * @throws IOException
//	 */
//	public static void appendFileContent(File file, String content) throws IOException {
//		// 打开一个写文件器，构造函数中的第二个参数true表示以追加形式写文件
//		FileWriter writer = new FileWriter(file, true);
//		writer.write(content);
//		writer.close();
//	}
//
//	/**
//	 * 使用RandomAccessFile追加文件内容
//	 * 
//	 * @param file
//	 * @param content
//	 * @throws IOException
//	 */
//	public static void appendFileMethod(File file, String content) throws IOException {
//		// 打开一个随机访问文件流，按"rw"读写方式
//		RandomAccessFile randomFile = new RandomAccessFile(file, "rw");
//		// 文件长度，字节数
//		long fileLength = randomFile.length();
//		// 将写文件指针移到文件尾。
//		randomFile.seek(fileLength);
//		randomFile.writeBytes(content);
//		randomFile.close();
//	}
//
//	/**
//	 * 读取文件内容
//	 * 
//	 * @param fileName
//	 */
//	public static void readFileByLines(String fileName) {
//		File file = new File(fileName);
//		BufferedReader reader = null;
//		try {
//			// 以行为单位读取文件内容，一次读一整行;
//			reader = new BufferedReader(new FileReader(file));
//			String tempString = null;
//			int line = 1;
//			// 一次读入一行，直到读入null为文件结束
//			while ((tempString = reader.readLine()) != null) {
//				// 显示行号
//				System.out.println("line " + line + ": " + tempString);
//				line++;
//			}
//			reader.close();
//		} catch (IOException e) {
//			logger.error("readFileByLines error" + e.getMessage(), e);
//		} finally {
//			if (reader != null) {
//				try {
//					reader.close();
//				} catch (IOException e1) {
//				}
//			}
//		}
//	}
//
//	/**
//	 * 反编译文件为正常文件
//	 * 
//	 * @param path
//	 */
//	public static void decompileCoeSource(String path) {
//		if (StringUtils.isNotEmpty(path)) {
//			File file = new File(path);
//			if (file.isDirectory()) {
//				List<String> files = recurFiles(path);
//				for (String fileName : files) {
//					File tempFile = new File(fileName);
//					// 创建新文件，以bak结尾。
//					File newFile = new File(fileName + ".bak");
//					BufferedReader reader = null;
//					try {
//						// 以行为单位读取文件内容，一次读一整行;
//						reader = new BufferedReader(new FileReader(tempFile));
//						String tempString = null;
//						// int line = 1;
//						// 一次读入一行，直到读入null为文件结束
//						while ((tempString = reader.readLine()) != null) {
//							// 显示行号
//							if ((StringUtils.defaultString(tempString).trim().startsWith("/*") && !StringUtils.defaultString(tempString)
//									.trim().contains("*/"))
//									|| StringUtils.defaultString(tempString).trim().startsWith("*")
//									|| StringUtils.defaultString(tempString).trim().startsWith("*/")
//									|| StringUtils.defaultString(tempString).trim().contains("//")) {
//								continue;
//							} else {
//								if ((tempString.contains("*") || tempString.contains("/")) && tempString.length() >= 9) {
//									if (tempString.length() >= 10) {
//										tempString = tempString.substring(10);
//									} else {
//										tempString = tempString.substring(9);
//									}
//								}
//							}
//							// System.out.println("line " + line + ": " + tempString);
//							// line++;
//							// 重新写新的文件
//							appendFileContent(newFile, tempString + "\r\n");
//						}
//						reader.close();
//						// 删除临时文件，重命名新文件为临时文件
//						tempFile.delete();
//						newFile.renameTo(tempFile);
//					} catch (IOException e) {
//						logger.error("decompileCoeSource error" + e.getMessage(), e);
//					} finally {
//						if (reader != null) {
//							try {
//								reader.close();
//							} catch (IOException e1) {
//							}
//						}
//					}
//				}
//			}
//		}
//	}
//
//	/**
//	 * 去除空行
//	 * 
//	 * @param content
//	 * @throws IOException
//	 */
//	public static String trimBlakLine(String content) throws IOException {
//		if (StringUtils.isNotEmpty(content)) {
//			BufferedReader inputFileReader = new BufferedReader(new StringReader(content));
//			String inputFileLine;
//			StringBuffer sb = new StringBuffer(content.length());
//			String separator = System.getProperty("line.separator");
//			while ((inputFileLine = inputFileReader.readLine()) != null) {
//				if (inputFileLine.length() == 0)
//					continue;
//				sb.append(inputFileLine).append(separator);
//			}
//			inputFileReader.close();
//			return sb.toString();
//		}
//		return "";
//	}
//
//	/**
//	 * 去除空行
//	 * 
//	 * @param content
//	 * @param isEnTrans
//	 * @return
//	 * @throws IOException
//	 */
//	public static String trimBlakLine(String content, boolean isEnTrans) throws IOException {
//		if (StringUtils.isNotEmpty(content)) {
//			BufferedReader inputFileReader = new BufferedReader(new StringReader(content));
//			String inputFileLine;
//			StringBuffer sb = new StringBuffer(content.length());
//			String separator = System.getProperty("line.separator");
//			while ((inputFileLine = inputFileReader.readLine()) != null) {
//				if (inputFileLine.length() == 0)
//					continue;
//				if (isEnTrans)
//					inputFileLine = inputFileLine.replaceAll("<!\\[CDATA\\[", "<CDATA>").replaceAll("]]>", "</CDATA>");
//				else
//					inputFileLine = inputFileLine.replaceAll("<CDATA>", "<!\\[CDATA\\[").replaceAll("</CDATA>", "]]>");
//				sb.append(inputFileLine).append(separator);
//			}
//			inputFileReader.close();
//			return sb.toString();
//		}
//		return "";
//	}
//
//	/**
//	 * 没有格式化过的xml串
//	 * 
//	 * @param content
//	 * @param encode
//	 * @return
//	 * @throws UnsupportedEncodingException
//	 * @throws IOException
//	 * @throws DocumentException
//	 */
//	public static String formatXml(String content, String encode) throws UnsupportedEncodingException, IOException, DocumentException {
//		String result = null;
//		if (StringUtils.isNotEmpty(content)) {
//			// 由于转义字符串格式化会错乱，这个进行特殊处理
//			String data = trimBlakLine(content, true);
//			SAXReader reader = new SAXReader();
//			// 创建一个串的字符输入流
//			StringReader in = new StringReader(data);
//			Document doc = reader.read(in);
//			// 创建输出格式
//			OutputFormat formater = OutputFormat.createPrettyPrint();// .createCompactFormat();
//			// 设置xml的输出编码
//			if (StringUtils.isNotEmpty(encode)) {
//				formater.setEncoding(encode);
//			}
//			// 创建输出(目标)
//			StringWriter out = new StringWriter();
//			// 创建输出流
//			XMLWriter writer = new XMLWriter(out, formater);
//			// 输出格式化的串到目标中，执行后。格式化后的串保存在out中。
//			writer.write(doc);
//			// 返回我们格式化后的结果
//			result = out.toString();
//			// 释放资源
//			writer.close();
//			out.close();
//			// 删除空行
//			result = trimBlakLine(result, false);
//		}
//		return result;
//	}
//
//	/**
//	 * 批量删除附件
//	 * 
//	 * @param sets
//	 */
//	public static void fileDelSets(Set<String> sets) {
//		if (sets != null && sets.size() > 0) {
//			for (String string : sets) {
//				delFile(string);
//			}
//		}
//	}
//
//	/**
//	 * 删除文件
//	 * 
//	 * @param filePathAndName
//	 *            String 文件路径及名称 如c:/fqf.txt
//	 * @param fileContent
//	 *            String
//	 * @return boolean
//	 */
//	public static void delFile(String filePathAndName) {
//		try {
//			String filePath = filePathAndName;
//			filePath = filePath.toString();
//			java.io.File myDelFile = new java.io.File(filePath);
//			myDelFile.delete();
//		} catch (Exception e) {
//			System.out.println("删除文件操作出错 ");
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 删除过期文件
//	 * 
//	 * @param String filePath
//	 *            文件路径及名称 如c:/fqf/
//	 * @param int
//	 *        seconds
//	 * @return boolean
//	 */
//	public static void delExpiredFilesM(String filePath, Date endDate, int minits) {
//		try {
//			if (StringUtils.isNotEmpty(filePath)) {
//				java.io.File myDelFile = new java.io.File(filePath);
//				File[] fileArr = myDelFile.listFiles();
//				if (fileArr != null) {
//					for (File file : fileArr) {
//						if (DateUtils.compareDateOutM(new Date(file.lastModified()), endDate, minits)) {
//							file.delete();
//						}
//					}
//				}
//			}
//		} catch (Exception e) {
//			System.out.println("删除过期文件");
//			logger.error("delExpiredFilesM error" + e.getMessage(), e);
//		}
//	}
//
//	/**
//	 * 删除文件夹
//	 * 
//	 * @param filePathAndName
//	 *            String 文件夹路径及名称 如c:/fqf
//	 * @param fileContent
//	 *            String
//	 * @return boolean
//	 */
//	public static void delFolder(String folderPath) {
//		try {
//			delAllFile(folderPath); // 删除完里面所有内容
//			String filePath = folderPath;
//			filePath = filePath.toString();
//			java.io.File myFilePath = new java.io.File(filePath);
//			myFilePath.delete(); // 删除空文件夹
//		} catch (Exception e) {
//			System.out.println("删除文件夹操作出错 ");
//			logger.error("delFolder error" + e.getMessage(), e);
//		}
//	}
//
//	/**
//	 * 删除文件夹里面的所有文件
//	 * 
//	 * @param path
//	 *            String 文件夹路径 如 c:/fqf
//	 */
//	public static void delAllFile(String path) {
//		File file = new File(path);
//		if (!file.exists()) {
//			return;
//		}
//		if (!file.isDirectory()) {
//			return;
//		}
//		String[] tempList = file.list();
//		File temp = null;
//		for (int i = 0; i < tempList.length; i++) {
//			if (path.endsWith(File.separator)) {
//				temp = new File(path + tempList[i]);
//			} else {
//				temp = new File(path + File.separator + tempList[i]);
//			}
//			if (temp.isFile()) {
//				temp.delete();
//			}
//			if (temp.isDirectory()) {
//				delAllFile(path + "/ " + tempList[i]);// 先删除文件夹里面的文件
//				delFolder(path + "/ " + tempList[i]);// 再删除空文件夹
//			}
//		}
//	}
//
//	/**
//	 * 删除空文件夹
//	 * 
//	 * @param path
//	 *            String 文件夹路径 如 c:/fqf
//	 * @param flag
//	 *            是否包含当前文件夹
//	 */
//	public static void delEmpDir(String path, boolean flag) {
//		File file = new File(path);
//		if (!file.exists()) {
//			return;
//		}
//		if (!file.isDirectory()) {
//			return;
//		}
//		String[] tempList = file.list();
//		File temp = null;
//		for (int i = 0; i < tempList.length; i++) {
//			if (path.endsWith(File.separator)) {
//				temp = new File(path + tempList[i]);
//			} else {
//				temp = new File(path + File.separator + tempList[i]);
//			}
//			if (temp.isDirectory()) {
//				delEmpDir(path + File.separator + tempList[i]);// 再删除空文件夹
//			}
//		}
//		// 删除当前空文件夹
//		if (flag) {
//			tempList = file.list();
//			if (tempList.length == 0) {
//				// 空文件夹
//				file.delete();
//			}
//		}
//	}
//
//	/**
//	 * 删除空文件夹
//	 * 
//	 * @param path
//	 *            String 文件夹路径 如 c:/fqf
//	 */
//	public static void delEmpDir(String path) {
//		File file = new File(path);
//		if (!file.exists()) {
//			return;
//		}
//		if (!file.isDirectory()) {
//			return;
//		}
//		String[] tempList = file.list();
//		File temp = null;
//		for (int i = 0; i < tempList.length; i++) {
//			if (path.endsWith(File.separator)) {
//				temp = new File(path + tempList[i]);
//			} else {
//				temp = new File(path + File.separator + tempList[i]);
//			}
//			if (temp.isDirectory()) {
//				delEmpDir(path + File.separator + tempList[i]);
//			}
//		}
//		tempList = file.list();
//		if (tempList.length == 0) {
//			// 空文件夹
//			file.delete();
//		}
//	}
//
//	/**
//	 * 复制单个文件
//	 * 
//	 * @param oldPath
//	 *            String 原文件路径 如：c:/fqf.txt
//	 * @param newPath
//	 *            String 复制后路径 如：f:/fqf.txt
//	 * @return boolean
//	 */
//	public static void copyFile(String oldPath, String newPath) {
//		try {
//			int bytesum = 0;
//			int byteread = 0;
//			File oldfile = new File(oldPath);
//			if (oldfile.exists()) { // 文件存在时
//				InputStream inStream = new FileInputStream(oldPath); // 读入原文件
//				FileOutputStream fs = new FileOutputStream(newPath);
//				byte[] buffer = new byte[1444];
//				int length;
//				while ((byteread = inStream.read(buffer)) != -1) {
//					bytesum += byteread; // 字节数 文件大小
//					System.out.println(bytesum);
//					fs.write(buffer, 0, byteread);
//				}
//				inStream.close();
//			}
//		} catch (Exception e) {
//			System.out.println("复制单个文件操作出错 ");
//			logger.error("copyFile error" + e.getMessage(), e);
//		}
//	}
//
//	/**
//	 * 复制整个文件夹内容
//	 * 
//	 * @param oldPath
//	 *            String 原文件路径 如：c:/fqf
//	 * @param newPath
//	 *            String 复制后路径 如：f:/fqf/ff
//	 * @return boolean
//	 */
//	public static void copyFolder(String oldPath, String newPath) {
//		try {
//			File newFile = new File(newPath);
//			if(!newFile.exists()){
//				newFile.mkdirs();
//			} // 如果文件夹不存在 则建立新文件夹
//			File a = new File(oldPath);
//			if(!a.exists()){
//				logger.error("source file path is not exists ,source file path:[{}]", oldPath);
//			}else {
//				String[] file = a.list();
//				File temp = null;
//				for (int i = 0; i < file.length; i++) {
//					if (oldPath.endsWith(File.separator)) {
//						temp = new File(oldPath + file[i]);
//					} else {
//						temp = new File(oldPath + File.separator + file[i]);
//					}
//					if (temp.isFile()) {
//						FileInputStream input = new FileInputStream(temp);
//						FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString());
//						byte[] b = new byte[1024 * 5];
//						int len;
//						while ((len = input.read(b)) != -1) {
//							output.write(b, 0, len);
//						}
//						output.flush();
//						output.close();
//						input.close();
//					}
//					if (temp.isDirectory()) {// 如果是子文件夹
//						copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]);
//					}
//			}
//			}
//		} catch (Exception e) {
//			System.out.println("复制整个文件夹内容操作出错 ");
//			logger.error("copyFolder error" + e.getMessage(), e);
//		}
//	}
//
//	/**
//	 * 移动文件到指定目录
//	 * 
//	 * @param oldPath
//	 *            String 如：c:/fqf.txt
//	 * @param newPath
//	 *            String 如：d:/fqf.txt
//	 */
//	public static void moveFile(String oldPath, String newPath) {
//		copyFile(oldPath, newPath);
//		delFile(oldPath);
//	}
//
//	/**
//	 * 移动文件到指定目录
//	 * 
//	 * @param oldPath
//	 *            String 如：c:/fqf.txt
//	 * @param newPath
//	 *            String 如：d:/fqf.txt
//	 */
//	public static void moveFolder(String oldPath, String newPath) {
//		copyFolder(oldPath, newPath);
//		delFolder(oldPath);
//	}
//
//	// /**
//	// * Created by IntelliJ IDEA.
//	// * User: tsaowe
//	// * Date: 11-9-1
//	// * Time: 上午9:13
//	// */
//	// public class XmlFormatter {
//	// public String format(String unformattedXml) {
//	// try {
//	// final org.w3c.dom.Document document = parseXmlFile(unformattedXml);
//	// org.apache.xml.serialize.OutputFormat format = new org.apache.xml.serialize.OutputFormat(document);
//	// format.setLineWidth(65);
//	// format.setIndenting(true);
//	// format.setIndent(2);
//	// Writer out = new StringWriter();
//	// XMLSerializer serializer = new XMLSerializer(out, format);
//	// serializer.serialize(document);
//	// return out.toString();
//	// } catch (IOException e) {
//	// throw new RuntimeException(e);
//	// }
//	// }
//	//
//	// private org.w3c.dom.Document parseXmlFile(String in) {
//	// try {
//	// DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//	// DocumentBuilder db = dbf.newDocumentBuilder();
//	// InputSource is = new InputSource(new StringReader(in));
//	// return db.parse(is);
//	// } catch (ParserConfigurationException e) {
//	// throw new RuntimeException(e);
//	// } catch (SAXException e) {
//	// throw new RuntimeException(e);
//	// } catch (IOException e) {
//	// throw new RuntimeException(e);
//	// }
//	// }
//	public static void main(String[] args) throws FileNotFoundException, IOException, DocumentException {
//		FileUtils util = new FileUtils();
//		// File file = new File("C:\\dfs_1.0.0.0_dml.sql");
//		// util.convertFileCode(file, ENCODE_GBK, ENCODE_UTF8);
//		// util.convertFileCode(file, ENCODE_UTF8, ENCODE_GBK);
//		// util.convertFileCode("D:/code/CaiPiao4/src", ENCODE_GBK, ENCODE_UTF8);
//		// util.appendFileContent(file, "i love you more and more each day as time goes by!\r\n");
//		// util.appendFileMethod(file, "i love you more and more each day as time goes by!\r\n");
//		// List<String> list =
//		// util.recurFiles("D:\\code\\foqa\\plt\\java_components\\configuration\\src\\com\\system\\rtplt\\component\\configuration");
//		// for (String string : list) {
//		// System.out.println(string);
//		// }
//		// file = new File(
//		// "D:\\code\\foqa\\plt\\java_components\\configuration\\src\\com\\system\\rtplt\\component\\configuration\\RemoteFileChangedReloadingStrategy.java");
//		// util.convertFileCode(file, ENCODE_GBK, ENCODE_UTF8);
//		// String content = "";
//		// String encode = "UTF-8";
//		// System.out.println(util.formatXml(content, encode));
//		// System.out.println("/*     */1 import java.io.InterruptedIOException;".substring(9));
//		decompileCoeSource("C:/Users/x_tangruihua/Desktop/cmppApi.src/com");
//	}
//	
//	
//	/** 
//     * 创建多级目录 
//     * 
//     * @param aParentDir 
//     *            String 
//     * @param aSubDir 
//     *            以 / 开头 
//     * @return boolean 是否成功 
//     */  
//    public static boolean creatDirs(String aParentDir, String aSubDir) {  
//        File aFile = new File(aParentDir);  
//        if (aFile.exists()) {  
//            File aSubFile = new File(aParentDir + aSubDir);  
//            if (!aSubFile.exists()) {  
//                return aSubFile.mkdirs();  
//            } else {  
//                return true;  
//            }  
//        } else {  
//            return false;  
//        }  
//    } 
//    
//    public static void fileDirCreate(File file) {
//		if (file.getParentFile().exists()) {
//			file.mkdir();
//		} else {
//			fileDirCreate(file.getParentFile());
//			file.mkdir();
//		}
//	}
//	
//}
